var express = require('express');
var router = express.Router();
const { User, WeChatUser } = require('../db/user')
var jwt = require('jsonwebtoken');

/* GET users listing. */
// 获取除了自己之外的用户列表
router.get('/', async function(req, res) {
  try {
    const currentUserId = req.query.currentUserId
    const filter = currentUserId ? { _id: { $ne: currentUserId } } : {}
    const users = await User.find(filter).select('_id username avatar createdAt')
    res.json(users)
  } catch (e) {
    res.status(500).json({ error: e.message })
  }
});

// 根据 id 列表批量获取用户信息: /users/byIds?ids=a,b,c
router.get('/byIds', async function(req, res) {
  try {
    const ids = String(req.query.ids || '')
      .split(',')
      .map((s) => s.trim())
      .filter(Boolean)
    if (!ids.length) return res.json([])
    
    // 优先从微信用户表查找
    const wechatUsers = await WeChatUser.find({ _id: { $in: ids } }).select('_id nickname avatarUrl')
    const regularUsers = await User.find({ _id: { $in: ids } }).select('_id username avatar')
    
    // 合并结果，微信用户优先
    const userMap = new Map()
    regularUsers.forEach(user => {
      userMap.set(user._id.toString(), {
        _id: user._id,
        username: user.username,
        avatar: user.avatar
      })
    })
    
    wechatUsers.forEach(user => {
      userMap.set(user._id.toString(), {
        _id: user._id,
        username: user.nickname,
        nickname: user.nickname, // 同时提供nickname字段
        avatar: user.avatarUrl
      })
    })
    
    const result = Array.from(userMap.values())
    res.json(result)
  } catch (e) {
    res.status(500).json({ error: e.message })
  }
});

// 通过用户ID直接登录（用于users数据库）
router.post('/login-by-id', async function(req, res) {
  try {
    const { userId } = req.body;
    
    if (!userId) {
      return res.status(400).json({
        success: false,
        message: '用户ID不能为空'
      });
    }

    // 查找用户（从users数据库）
    const user = await User.findById(userId);
    if (!user) {
      return res.status(404).json({
        success: false,
        message: '用户不存在'
      });
    }

    // JWT 密钥
    const JWT_SECRET = "your-secret-key-2024";

    // 生成 Access Token (短期，15分钟)
    const accessToken = jwt.sign(
      {
        userId: user._id,
        username: user.username,
        type: "access",
      },
      JWT_SECRET,
      { expiresIn: "15m" }
    );

    // 生成 Refresh Token (长期，7天)
    const refreshToken = jwt.sign(
      {
        userId: user._id,
        username: user.username,
        type: "refresh",
      },
      JWT_SECRET,
      { expiresIn: "7d" }
    );

    res.json({
      success: true,
      message: '登录成功',
      data: {
        userId: user._id,
        username: user.username,
        nickname: user.username, // 使用username作为nickname
        avatarUrl: user.avatar,
        accessToken: accessToken,
        refreshToken: refreshToken,
      },
    });
  } catch (error) {
    console.error('通过ID登录错误:', error);
    res.status(500).json({
      success: false,
      message: '服务器内部错误',
    });
  }
});

// 获取第一个可用用户（用于一键登录）
router.get('/first-user', async function(req, res) {
  try {
    const user = await User.findOne({}).sort({ createdAt: 1 });
    if (!user) {
      return res.status(404).json({
        success: false,
        message: '数据库中没有用户'
      });
    }
    
    res.json({
      success: true,
      data: {
        userId: user._id,
        username: user.username,
        avatar: user.avatar
      }
    });
  } catch (error) {
    console.error('获取用户失败:', error);
    res.status(500).json({
      success: false,
      message: '服务器内部错误'
    });
  }
});

// 创建测试用户（用于一键登录）
router.post('/create-test-user', async function(req, res) {
  try {
    const { userId, username, password } = req.body;
    
    if (!userId || !username) {
      return res.status(400).json({ success: false, message: '用户ID和用户名不能为空' });
    }
    
    // 检查用户是否已存在
    const existingUser = await User.findById(userId);
    if (existingUser) {
      return res.json({ success: true, message: '用户已存在', data: { userId: existingUser._id } });
    }
    
    // 创建新用户
    const newUser = new User({
      _id: userId,
      username: username,
      password: password || '123',
      avatar: 'https://picsum.photos/80',
      createdAt: new Date()
    });
    
    await newUser.save();
    
    console.log('测试用户创建成功:', newUser._id);
    
    res.json({
      success: true,
      message: '用户创建成功',
      data: {
        userId: newUser._id,
        username: newUser.username
      }
    });
  } catch (error) {
    console.error('创建测试用户失败:', error);
    res.status(500).json({ success: false, message: '服务器内部错误' });
  }
});

module.exports = router;
